export const wgsToGcj = ({
	lng,
	lat
}) => {
	let GCJ_A = 6378245,
		GCJ_EE = 0.00669342162296594323,
		x = lng - 105,
		y = lat - 35;
	let dLat = -100 +
		2 * x +
		3 * y +
		0.2 * y * y +
		0.1 * x * y +
		0.2 * Math.sqrt(Math.abs(x)) +
		((2 * Math.sin(x * 6 * Math.PI) +
				2 * Math.sin(x * 2 * Math.PI) +
				2 * Math.sin(y * Math.PI) +
				4 * Math.sin((y / 3) * Math.PI) +
				16 * Math.sin((y / 12) * Math.PI) +
				32 * Math.sin((y / 30) * Math.PI)) *
			20) /
		3,
		dLng =
		300 +
		x +
		2 * y +
		0.1 * x * x +
		0.1 * x * y +
		0.1 * Math.sqrt(Math.abs(x)) +
		((2 * Math.sin(x * 6 * Math.PI) +
				2 * Math.sin(x * 2 * Math.PI) +
				2 * Math.sin(x * Math.PI) +
				4 * Math.sin((x / 3) * Math.PI) +
				15 * Math.sin((x / 12) * Math.PI) +
				30 * Math.sin((x / 30) * Math.PI)) *
			20) /
		3,
		radLat = (lat * Math.PI) / 180;
	let magic = 1 - GCJ_EE * Math.pow(Math.sin(radLat), 2);
	let lat_deg_arclen =
		((Math.PI / 180) * (GCJ_A * (1 - GCJ_EE))) / Math.pow(magic, 1.5),
		lng_deg_arclen =
		(Math.PI / 180) * ((GCJ_A * Math.cos(radLat)) / Math.sqrt(magic));
	return {

		lng: lng + dLng / lng_deg_arclen,
		lat: lat + dLat / lat_deg_arclen,
	};
};

export const gcjToWgs = ({
	lng,
	lat
}) => {
	console.log({
		lng,
		lat
	})
	let prc = 1e-5,
		i = 0,
		that = this;

	function gTw({
		lng,
		lat
	}) {
		return lnglatDiff({
				lng,
				lat
			},
			lnglatDiff(wgsToGcj({
				lng,
				lat
			}), {
				lng,
				lat
			})
		);
	}

	function lnglatDiff(a, b) {
		return {
			lng: a.lng - b.lng,
			lat: a.lat - b.lat
		};
	}
	let curr = gTw({
		lng,
		lat
	});
	let diff = {
		lat: Infinity,
		lng: Infinity
	};
	while (Math.max(Math.abs(diff.lat), Math.abs(diff.lng)) > prc && i++ < 10) {
		diff = lnglatDiff(wgsToGcj(curr), {
			lng,
			lat
		});
		curr = lnglatDiff(curr, diff);
	}

	return curr;
};
